/**
 * @param id 传入的目标节点id
 * @param treeData 完整的树结构数据
 * @return 返回id所在节点的数据，没找到返回null
 */
export function searchTreeNodebyId(id, treeData) {
  let result = null
  function _deepSearch(tree) {
    if (!tree || tree.length === 0) {
      return
    }
    for (const item of tree) {
      if (item.id === id) {
        result = item
        return
      } else {
        _deepSearch(item.children)
      }
    }
  }
  _deepSearch(treeData)
  return result
}

/**
 * @param ids 传入的目标节点数组ids
 * @param treeData 完整的树结构数据
 * @return 返回id所在节点的数据，没找到返回null
 */
export function searchTreeNodebyIds(ids, treeData) {
  const result = []
  function _deepSearch(tree) {
    if (!tree || tree.length === 0) {
      return
    }
    for (const item of tree) {
      if (ids.includes(item.id)) {
        result.push(item)
        _deepSearch(item.children)
      } else {
        _deepSearch(item.children)
      }
    }
  }
  _deepSearch(treeData)
  return result
}

/**
 * @param oldTreeRef el-tree Vue Componnet
 * @return 返回所有当前节点状态是展开的节点，一维数组
 */

// TODO：非正常实现方式，已有新方案，待完全替换后删除
export function getExpandedTreeNodeId(oldTreeRef) {
  const oldTreeKeys = Object.values(oldTreeRef.store.nodesMap)
    .filter(item => item.expanded)
    .map(item => item.data.id)
  return oldTreeKeys
}

/**
 * @param key 传入的目标节点id
 * @param treeData 完整的树结构数据
 * @return 根据key, 返回根节点到key所在节点的完整路径
 */
export function getTreeDeepArr(key, treeData) {
  const arr = [] // 在递归时操作的数组
  let returnArr = [] // 存放结果的数组
  let depth = 0 // 定义全局层级
  // 定义递归函数
  function childrenEach(childrenData, depthN) {
    for (let j = 0; j < childrenData.length; j++) {
      depth = depthN // 将执行的层级赋值 到 全局层级
      arr[depthN] = (childrenData[j].id)
      if (childrenData[j].id === key) {
        returnArr = arr.slice(0, depthN + 1) // 将目前匹配的数组，截断并保存到结果数组，
        break
      } else {
        if (childrenData[j].children) {
          depth++
          childrenEach(childrenData[j].children, depth)
        }
      }
    }
    return returnArr
  }
  return childrenEach(treeData, depth)
}
